import axios from "axios";

// 定义基础URL地址 后台的地址
let baseUrl = "http://localhost:8000";

// 创建axios实例
const httpService = axios.create({
    // 设置基础URL地址 后面所有的请求都会自动拼接这个前缀地址
    baseURL: baseUrl,
    // 超时时间设置为5s
    timeout: 5000,

});

// 请求拦截器
httpService.interceptors.request.use(function (config) { 
    //设置token
    config.headers.Authorization = window.sessionStorage.getItem('token');
    return config;
}, function (error) { 
    return Promise.reject(error);
}
)

// 响应拦截器
httpService.interceptors.response.use((response) => {
    // 可以在这里对响应进行一些处理 比如判断token是否过期
    console.log(response);
    
    return response;
},
    error => {
        console.log("响应失败");
        // 响应失败的处理逻辑
        return Promise.reject(error);
    }
)

//网络请求部分
/**
 * get请求, 
 * @param url 请求地址
 * @param params 请求参数
 */
export function get(url, params = {}) {
    return new Promise((resolve, reject) =>
        httpService({
        url: url,
        method: 'get',
        params: params,
        }).then(res => { 
            console.log(res);
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    )
}

export function post(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'post',
            data: params,
        }).then(res => {
            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

export function del(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'delete',
            data: params,
        }).then(res => {
            console.log(res);

            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

/**
 * 文件上传
 * @param url 请求地址
 * @param params 请求参数
 */
export function fileUpload(url, params = {}) {
    return new Promise((resolve, reject) => {
        httpService({
            url: url,
            method: 'post',
            data: params,
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).then(res => {
            console.log(res);

            resolve(res)
        }).catch(err => {
            reject(err)
        })
    })
}

export function getServerUrl() {
    return baseUrl;
}

export default {
    get,
    post,
    del,
    fileUpload,
    getServerUrl,
}